// pages/ticketDetail/ticketDetail.js
const api = require("../../config/api.js");
const util = require("../../utils/util.js");
const shareCard = require("../../utils/shareCard.js");

Page({
  /**
   * 页面的初始数据
   */
  data: {
    // 雪票详情数据
    ticketDetail: null,
    // 加载状态
    loading: true,
    // 错误状态
    error: false,
    errorMessage: '',
    // 雪票ID
    ticketId: null,
    // 收藏状态
    isFavorited: false,
    // 显示联系方式弹窗
    showContactPopup: false,
    // 当前登录用户信息
    currentUserInfo: null,
    // 风险须知弹窗显示状态
    showRiskNoticePopup: false,
    // 分享卡片图片路径（缓存）
    shareCardImageUrl: ''
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function (options) {
    console.log("雪票详情页面加载完成", options);
    
    // 获取当前登录用户信息
    this.loadCurrentUserInfo();
    
    // 获取雪票ID
    if (options.id) {
      this.setData({
        ticketId: options.id
      });
      // 加载雪票详情
      this.loadTicketDetail(options.id);
    } else {
      this.setData({
        error: true,
        errorMessage: '缺少雪票ID参数',
        loading: false
      });
    }
  },

  /**
   * 加载当前登录用户信息
   */
  loadCurrentUserInfo: function() {
    const userInfo = wx.getStorageSync('userInfo');
    if (userInfo) {
      this.setData({
        currentUserInfo: userInfo
      });
    }
  },

  /**
   * 将时间戳转换为 yyyy-mm-dd 格式
   */
  formatDate: function(timestamp) {
    if (!timestamp) return '';
    
    // 如果时间戳是字符串，转换为数字
    const ts = typeof timestamp === 'string' ? parseInt(timestamp) : timestamp;
    
    // 如果时间戳是秒级（10位），转换为毫秒级（13位）
    const timestampMs = ts < 10000000000 ? ts * 1000 : ts;
    
    const date = new Date(timestampMs);
    const year = date.getFullYear();
    const month = String(date.getMonth() + 1).padStart(2, '0');
    const day = String(date.getDate()).padStart(2, '0');
    
    return `${year}-${month}-${day}`;
  },

  /**
   * 加载雪票详情
   */
  loadTicketDetail: function (ticketId) {
    const that = this;
    
    that.setData({
      loading: true,
      error: false
    });

    // 调用真实的雪票详情API
    util
      .request(api.TicketInfo, { id: ticketId }, "POST", "application/json")
      .then(function (res) {
        console.log("雪票详情API响应:", res);
        
        // 使用标准化的响应处理
        const normalizedRes = util.normalizeApiResponse(res);
        console.log('标准化后的响应:', normalizedRes);
        
        if (normalizedRes.success && normalizedRes.data && normalizedRes.data) {
          const ticketData = normalizedRes.data;
          
          // 将API返回的数据转换为页面需要的格式
          const ticketDetail = {
            id: ticketId,
            nickName: ticketData.nickName,
            imageUrl: ticketData.imageUrl,
            isClub: ticketData.isClub || 0,
            type: ticketData.type, // 0:求购 1:转让
            ticketType: ticketData.ticketType, // 0:1日 1:1.5日 2:2日 3:多日
            isFull: ticketData.isFull, // 0:残票 1:整票
            skiResort: {
              id: 1,
              name: ticketData.skiAddress
            },
            date: that.formatDate(ticketData.date),
            timeSlot: ticketData.ticket, // 0:全天 1:上午 2:下午 3:夜场
            quantity: ticketData.count || 1,
            deliveryType: ticketData.getType, // 0:面交 1:线上
            price: ticketData.price || 0,
            description: ticketData.detail || "暂无详细信息",
            wechat: ticketData.wechat || "",
            phone: ticketData.phone || "",
            status: 1 // 1:有效 0:已关闭
          };
          
          that.setData({
            ticketDetail: ticketDetail,
            loading: false,
            // 从API返回的数据读取收藏状态
            isFavorited: ticketData.isCollection === 1,
            // 保存isClub字段用于控制level-badge显示
            isClub: ticketData.isClub || 0
          });
          
          // 数据加载完成后，预先生成分享卡片
          that.generateShareCard();
        } else {
          console.error("雪票详情加载失败:", normalizedRes.message);
          that.setData({
            error: true,
            errorMessage: normalizedRes.message || "加载失败",
            loading: false
          });
        }
      })
      .catch(function (err) {
        console.error("雪票详情请求失败:", err);
        that.setData({
          error: true,
          errorMessage: "网络请求失败",
          loading: false
        });
      });
  },

  /**
   * 返回按钮
   */
  onBack: function () {
    wx.navigateBack();
  },

  /**
   * 显示联系方式弹窗（带登录校验）
   */
  showContactPopup: function () {
    const util = require("../../utils/util.js");
    
    // 检查是否已登录
    if (!util.checkUserLogin()) {
      util.showLoginModal('此操作需要先登录，是否立即登录？', () => {
        util.navigateToLogin();
      });
      return;
    }
    
    this.setData({
      showContactPopup: true
    });
  },

  /**
   * 关闭联系方式弹窗
   */
  closeContactPopup: function () {
    this.setData({
      showContactPopup: false
    });
  },

  /**
   * 阻止事件冒泡
   */
  stopPropagation: function () {
    // 阻止弹窗内容区域的点击事件冒泡
  },

  /**
   * 复制微信号
   */
  copyWechat: function () {
    const { ticketDetail } = this.data;
    
    if (!ticketDetail || !ticketDetail.wechat) {
      wx.showToast({
        title: '暂无微信号',
        icon: 'none'
      });
      return;
    }

    // 确保微信号是字符串类型
    const wechatStr = String(ticketDetail.wechat || '').trim();
    
    if (!wechatStr) {
      wx.showToast({
        title: '暂无微信号',
        icon: 'none'
      });
      return;
    }

    wx.setClipboardData({
      data: wechatStr,
      success: () => {
        wx.showToast({
          title: '微信号已复制',
          icon: 'success'
        });
      },
      fail: (err) => {
        console.error('复制微信号失败:', err);
        wx.showToast({
          title: '复制失败，请重试',
          icon: 'none'
        });
      }
    });
  },

  /**
   * 复制手机号
   */
  copyPhone: function () {
    const { ticketDetail } = this.data;
    
    if (!ticketDetail || !ticketDetail.phone) {
      wx.showToast({
        title: '暂无手机号',
        icon: 'none'
      });
      return;
    }

    // 确保手机号是字符串类型
    const phoneStr = String(ticketDetail.phone || '').trim();
    
    if (!phoneStr) {
      wx.showToast({
        title: '暂无手机号',
        icon: 'none'
      });
      return;
    }

    wx.setClipboardData({
      data: phoneStr,
      success: () => {
        wx.showToast({
          title: '手机号已复制',
          icon: 'success'
        });
      },
      fail: (err) => {
        console.error('复制手机号失败:', err);
        wx.showToast({
          title: '复制失败，请重试',
          icon: 'none'
        });
      }
    });
  },

  /**
   * 分享
   */
  onShare: function () {
    const { ticketDetail } = this.data;
    if (!ticketDetail) return;

    return {
      title: `雪票${ticketDetail.type === 0 ? '求购' : '转让'} - ${ticketDetail.skiResort.name}`,
      path: `/pages/ticketDetail/ticketDetail?id=${ticketDetail.id}`,
      imageUrl: '' // 可以设置分享图片
    };
  },

  /**
   * 重新加载
   */
  onRetry: function () {
    if (this.data.ticketId) {
      this.loadTicketDetail(this.data.ticketId);
    }
  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady: function () {
    console.log("雪票详情页面渲染完成");
  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow: function () {
    console.log("雪票详情页面显示");
  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide: function () {
    console.log("雪票详情页面隐藏");
  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload: function () {
    console.log("雪票详情页面卸载");
  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh: function () {
    console.log("用户下拉刷新");
    if (this.data.ticketId) {
      this.loadTicketDetail(this.data.ticketId);
    }
    // 停止下拉刷新
    wx.stopPullDownRefresh();
  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom: function () {
    console.log("页面触底");
  },

  /**
   * 加入俱乐部
   */
  joinClub: function () {
    wx.navigateTo({
      url: '/pages/clubJoin/clubJoin',
      success: function() {
        console.log('跳转到加入俱乐部页面成功');
      },
      fail: function(err) {
        console.error('跳转到加入俱乐部页面失败:', err);
        wx.showToast({
          title: '页面跳转失败',
          icon: 'none'
        });
      }
    });
  },

  /**
   * 切换收藏状态
   */
  toggleFavorite: function () {
    const that = this;
    const ticketId = this.data.ticketId;
    
    if (!ticketId) {
      wx.showToast({
        title: '数据错误',
        icon: 'none'
      });
      return;
    }
    
    const isFavorited = !this.data.isFavorited;
    
    // 调用收藏API
    util.request(api.UserSave, {
      id: parseInt(ticketId),
      type: 2  // 0:拼车 1:拼房 2:雪票
    }, 'POST', 'application/json').then((res) => {
      console.log('收藏API响应:', res);
      
      const normalizedRes = util.normalizeApiResponse(res);
      
      if (normalizedRes.success) {
        that.setData({
          isFavorited: isFavorited
        });
        
        wx.showToast({
          title: isFavorited ? '已收藏' : '已取消收藏',
          icon: 'success'
        });
        
        // 重新加载详情数据以获取最新的收藏状态
        that.loadTicketDetail(ticketId);
      } else {
        wx.showToast({
          title: normalizedRes.message || '操作失败',
          icon: 'none'
        });
      }
    }).catch((err) => {
      console.error('收藏API请求失败:', err);
      wx.showToast({
        title: '网络错误，请重试',
        icon: 'none'
      });
    });
  },

  /**
   * 生成分享卡片（预生成并缓存）
   */
  generateShareCard: function() {
    const that = this;
    const { ticketDetail, ticketId } = this.data;
    
    if (!ticketDetail || !ticketId) {
      return Promise.resolve();
    }
    
    // 异步生成分享卡片
    return shareCard.getShareCard('ticket', {
      id: ticketId,
      type: ticketDetail.type,
      skiResort: ticketDetail.skiResort,
      date: ticketDetail.date,
      timeSlot: ticketDetail.timeSlot,
      ticketType: ticketDetail.ticketType,
      isFull: ticketDetail.isFull,
      quantity: ticketDetail.quantity,
      price: ticketDetail.price,
      description: ticketDetail.description
    }).then((shareConfig) => {
      // 缓存分享卡片图片路径
      that.setData({
        shareCardImageUrl: shareConfig.imageUrl
      });
      // 返回分享配置，供调用方使用
      return shareConfig;
    }).catch((err) => {
      console.error('生成分享卡片失败:', err);
      // 失败时使用基础图
      const fallbackConfig = {
        imageUrl: '/static/images/shareBase.png'
      };
      that.setData({
        shareCardImageUrl: fallbackConfig.imageUrl
      });
      return fallbackConfig;
    });
  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage: async function () {
    const { ticketDetail, ticketId, shareCardImageUrl } = this.data;
    
    // 获取分享配置
    const shareConfig = shareCard.getShareConfig('ticket', {
      id: ticketId,
      type: ticketDetail?.type,
      skiResort: ticketDetail?.skiResort
    });
    
    // 如果没有缓存的分享卡片，显示loading并同步等待生成完成
    if (!shareCardImageUrl) {
      wx.showLoading({
        title: '生成分享卡片中...',
        mask: true
      });
      try {
        // 同步等待分享卡片生成完成，并获取返回的分享配置
        const generatedConfig = await this.generateShareCard();
        // 使用生成的分享卡片图片
        shareConfig.imageUrl = generatedConfig?.imageUrl || '/static/images/shareBase.png';
      } catch (err) {
        console.error('生成分享卡片失败:', err);
        shareConfig.imageUrl = '/static/images/shareBase.png';
      } finally {
        wx.hideLoading();
      }
    } else {
      // 使用缓存的分享卡片图片
      shareConfig.imageUrl = shareCardImageUrl;
    }
    
    return shareConfig;
  },

  /**
   * 显示风险须知弹窗
   */
  showRiskNoticePopup: function() {
    this.setData({
      showRiskNoticePopup: true
    });
  },

  /**
   * 隐藏风险须知弹窗
   */
  hideRiskNoticePopup: function() {
    this.setData({
      showRiskNoticePopup: false
    });
  },

  /**
   * 阻止弹窗内容区域点击事件冒泡
   */
  preventClose: function() {
    // 阻止事件冒泡，防止点击内容区域时关闭弹窗
  },

  /**
   * 确认风险须知
   */
  confirmRiskNotice: function() {
    this.setData({
      showRiskNoticePopup: false
    });
  }
});
